[SQL] DDL ( create, alter, drop, truncate )

  1. DDL 이란?
  2. create
  3. drop
  4. truncate
  5. alter

DDL 이란?

  • Data Definition Language
  • 데이터베이스를 정의하는 언어
  • 데이터를 생성, 수정 ,삭제 하는 등의 데이터 전체 골격 결정
  • create, alter, drop, truncate

CREATE

  • 객체를 새로 생성할 때 사용하는 명령어
  • 객체 종류 : 데이터베이스, 테이블, 인덱스, 뷰, 프로시져, 트리거 등

[문법]

CREATE [객체종류] [객체이름] (속성 및 제약 조건)

실행 결과: 지정한 이름과 속성(컬럼명, 데이터타입, 제약조건 등)으로 새로운 객체(테이블 등)가 생성됨.

DROP

  • delete는 내용 값을 삭제하는 것이고, Drop은 객체를 삭제하는 것
  • 객체 종류 : 데이터베이스, 테이블, 뷰, 인덱스, 프로시저, 함수, 트리거, 스키마, 사용자, 시퀀스 삭제 가능
  • delete의 경우 Rollback이 가능하지만, drop의 경우 Rollback 이 불가능하다
    • 왜 그런가: DELETE는 DML이라 트랜잭션 로그에 각 행의 변경 내역이 기록되고 COMMIT 전까지는 ROLLBACK으로 되돌릴 수 있다. 반면 DROP은 DDL로, 대부분의 RDBMS에서 실행 즉시(또는 커밋과 함께) 확정되는 암시적 커밋(implicit commit)을 유발한다. 그래서 객체 자체가 사라진 뒤에는 별도의 백업 없이 되돌릴 수 없다.
  • CASCADE 옵션 사용 ( 해당 옵션을 사용하면, 삭제되는 객체와 종속되어있는 객체들도 함께 삭제된다 )

[문법]

Drop [객체종류] [객체이름];

실행 결과: 지정한 객체(테이블 등)가 데이터베이스에서 완전히 삭제됨 (Rollback 불가능).

TRUNCATE

  • 테이블에 있는 데이터 전부 삭제
  • ROLLBACK 불가능
  • delete는 where절이 사용 가능하며, 한줄한줄 삭제하는 반면 truncate는 한번에 삭제함 (속도 빠름)
  • 왜 TRUNCATE가 빠른가: DELETE는 행 단위로 삭제 연산을 로그에 남기고 트리거를 실행하지만, TRUNCATE는 테이블에 할당된 데이터 페이지 자체를 초기화하는 방식이라 로그 기록량이 훨씬 적다. 그 대신 행 단위 로그가 없어 (엔진에 따라) ROLLBACK이 제한되고, WHERE로 일부만 지울 수도 없다.

실행 결과: 테이블 구조(컬럼, 제약조건)는 그대로 유지된 채 테이블 안의 모든 행이 삭제됨.

ALTER

  • 테이블의 속성 및 열(column)에 관하여 수정 하는 작업
  • 컬럼 추가/삭제, 테이블 이름 변경, 기본키 추가, 인덱스 추가/삭제/수정, 컬럼 데이터타입 변경 등
  • 왜 DROP 후 재생성하지 않고 ALTER를 쓰는가: 운영 중인 테이블을 DROP하면 기존 데이터와 그 테이블을 참조하는 제약조건(FK)·인덱스·권한이 함께 사라진다. ALTER는 기존 데이터를 유지한 채 구조만 바꾸므로 무중단에 가깝게 스키마를 진화시킬 수 있다 (다만 대용량 테이블에서는 컬럼 추가/타입 변경이 테이블 전체 재작성을 유발해 잠금이 오래 걸릴 수 있다는 점은 엔진별로 다르다).

[문법]

ALTER TABLE [테이블명] [동작]

실행 결과: 지정한 동작(컬럼 추가/삭제, 테이블명 변경, 기본키 추가, 데이터타입 변경 등)이 테이블에 적용됨.